Day 16 문자열
Day16 16단계 20231104
3. 배열에서 문자열 대소문자 변환하기
- 내 풀이 : strArr의 인덱스가 홀짝인지의 유무에 따라 대소문자 변환을 실행했다.
- 스트림으로 풀어보려 했는데 오류가 떠서 못했다. 그런데 아이디어는 스트림으로 푼 사람과 동일해서 조금 배신당한 느낌이다..
- 오류의 원인은 String[] answer로 미리 IntStream 객체를 변환해줄 결과 객체를 선언 안해서가 아닐까.. 다만 mapToObj를 써서 내부에서 변환 시킬 때 왜 오류가 났었는지는 의문이다.
class Solution {
public String[] solution(String[] strArr) {
for (int i = 0; i < strArr.length; i++) {
if (i % 2 == 0) {
strArr[i] = strArr[i].toLowerCase();
} else {
strArr[i] = strArr[i].toUpperCase();
}
}
return strArr;
}
}
- 다른 사람 풀이 : Stream을 사용했고, IntStream으로 먼저 배열의 인덱스 요소를 얻은 다음, 인덱스가 홀짝인지에 따라 strArr의 요소를 대소문자 변환하였다.
String[] answer = IntStream.range(0, strArr.length)
.mapToObj(i -> i%2==0 ? strArr[i].toLowerCase() : strArr[i].toUpperCase())
.toArraynew;
4. A 강조하기
- 내 풀이 1 : 먼저 소문자 a를 모두 대문자 A로 바꾸고, myString 내의 a를 제외한 모든 알파벳 대문자를 소문자로 변환했다.
class Solution {
public String solution(String myString) {
myString = myString.replaceAll("a", "A");
for(int i = 0; i < myString.length(); i++) {
if (myString.charAt(i) != 'A' && Character.isUpperCase(myString.charAt(i))) {
myString = myString.replace(myString.charAt(i), Character.toLowerCase(myString.charAt(i)));
}
}
return myString;
}
}
- 내 풀이 2 : Stream을 사용해서 풀었다.
- 먼저 myString을 split("")으로 배열화 시킨 것을 Stream으로 만들고, 모든 요소를 소문자로 바꾼다.
- 이 중 "a"만 "A"로 myString.replaceAll("a", "A") 해준다.
- 물론 이처럼 짧은 문자열 및 배열 처리에는 Stream보다는 for문을 사용하는 게 더 빠르다.
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String myString) {
myString = Arrays.stream(myString.split(""))
.maptoLowerCase
.collect(Collectors.joining());
myString = myString.replaceAll("a", "A");
return myString;
}
}
- 다른 사람 풀이 : String.toLowerCase()를 사용해서 전체를 바꾸고, myString.replaceAll("a", "A")만 후처리 해줬다.
- 나는 왜 위에서 먼저 이걸 안쓰고 굳이 Character로 비교했는지 모르겠다. 정작 Stream에서 쓸 때는 또 String.toLowerCase()를 썼다.